package utils

import (
	"container/list"
	"errors"
)

type Utils struct {}

func NewUtils() *Utils {
	return &Utils{}
}

// 入栈到最后
func (u *Utils)PushBack(l *list.List, item interface{}) error {
	l.PushBack(item)
	return nil
}

// 入栈到最前面
func (u *Utils)PushFront(l *list.List, item interface{}) error  {
	l.PushFront(item)
	return nil
}

// 最后一个出栈
func (u *Utils) RemoveLast(l *list.List) (interface{}, error) {
	if u.IsEmpty(l) {
		return nil, errors.New("出栈错误")
	}

	return l.Remove(l.Back()), nil
}

// 第一个元素出栈
func (u *Utils) RemoveFront(l *list.List) (interface{}, error)  {
	if u.IsEmpty(l) {
		return nil, errors.New("出栈错误")
	}

	return l.Remove(l.Front()), nil
}

// 获取栈的长度
func (u *Utils) GetLenStack(l *list.List) int {
	return l.Len()
}

// 判断栈是否为空
// 空    ： true
// 有元素: fasle
func (u *Utils) IsEmpty(l *list.List) bool {
	if l.Len() == 0 {
		return true
	}

	return false
}

// 查询最后opt一个元素
func (u *Utils) BackOPT(l *list.List) (string)  {
	return l.Back().Value.(string)
}
//